#变量
# 数字类型
# 定义不同的数字类型变量

# 1. 整型 (int) - 表示整数
integer_num = 42
print(f"整型变量: {integer_num}, 类型: {type(integer_num)}")

# 2. 浮点型 (float) - 表示小数
float_num = 3.14159
print(f"浮点型变量: {float_num}, 类型: {type(float_num)}")

# 3. 复数类型 (complex) - 表示复数（实部 + 虚部j）
complex_num = 3 + 4j
print(f"复数变量: {complex_num}, 类型: {type(complex_num)}")
print(f"复数实部: {complex_num.real}, 虚部: {complex_num.imag}")

# 4. 布尔类型 (bool) - 表示真或假
bool_true = True
bool_false = False
print(f"布尔真: {bool_true}, 类型: {type(bool_true)}")
print(f"布尔假: {bool_false}, 类型: {type(bool_false)}")

#数据类型

# 1. 字符串类型 (String)
print("\n=== 2. 字符串类型 ===")
str1 = "Hello, Python!"   # 双引号字符串
str2 = '单引号字符串'      # 单引号字符串
str3 = '''三引号字符串
可以换行
多行文本'''               # 三引号字符串
str4 = "Python 3.10"      # 包含数字的字符串

print(f"字符串1: {str1}, 类型: {type(str1)}")
print(f"字符串长度: {len(str1)}")
print(f"字符串拼接: {str1 + ' ' + str4}")

# 2. 列表类型 (List) - 有序、可变
print("\n=== 3. 列表类型 ===")
empty_list = []           # 空列表
number_list = [1, 2, 3, 4, 5]  # 数字列表
mixed_list = [1, "hello", 3.14, True]  # 混合类型列表
nested_list = [[1, 2], [3, 4], [5, 6]]  # 嵌套列表

print(f"数字列表: {number_list}, 类型: {type(number_list)}")
print(f"列表长度: {len(number_list)}")
print(f"第一个元素: {number_list[0]}")

# 修改列表
number_list[2] = 100      # 列表是可变的
print(f"修改后的列表: {number_list}")

# 3. 元组类型 (Tuple) - 有序、不可变
print("\n=== 4. 元组类型 ===")
empty_tuple = ()          # 空元组
single_tuple = (42,)      # 单元素元组（注意逗号）
number_tuple = (1, 2, 3, 4, 5)
mixed_tuple = (1, "hello", 3.14, True)

print(f"数字元组: {number_tuple}, 类型: {type(number_tuple)}")
print(f"元组长度: {len(number_tuple)}")
print(f"第二个元素: {number_tuple[1]}")

# 4. 集合类型 (Set) - 无序、不重复
print("\n=== 5. 集合类型 ===")
empty_set = set()         # 空集合
number_set = {1, 2, 3, 4, 5}
duplicate_set = {1, 2, 2, 3, 3, 3}  # 自动去重

print(f"数字集合: {number_set}, 类型: {type(number_set)}")
print(f"去重集合: {duplicate_set}")

# 集合操作
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(f"交集: {set1 & set2}")
print(f"并集: {set1 | set2}")
print(f"差集: {set1 - set2}")

# 5. 字典类型 (Dictionary) - 键值对、无序
print("\n=== 6. 字典类型 ===")
empty_dict = {}           # 空字典
person_dict = {
    "name": "张三",
    "age": 25,
    "height": 175.5,
    "is_student": False
}
mixed_dict = {
    1: "one",
    "two": 2,
    3.0: [1, 2, 3]
}

print(f"人员字典: {person_dict}, 类型: {type(person_dict)}")
print(f"字典长度: {len(person_dict)}")
print(f"姓名: {person_dict['name']}")
print(f"年龄: {person_dict.get('age')}")

# 修改字典
person_dict["age"] = 26   # 修改值
person_dict["city"] = "北京"  # 添加新键值对
print(f"修改后的字典: {person_dict}")

# 6. 其他常用类型
print("\n=== 7. 其他常用类型 ===")
none_value = None         # None类型
print(f"None值: {none_value}, 类型: {type(none_value)}")

# 7. 类型检查和转换
print("\n=== 8. 类型检查和转换 ===")
x = 42
print(f"原始值: {x}, 类型: {type(x)}")
print(f"是否为整数: {isinstance(x, int)}")
print(f"是否为数字: {isinstance(x, (int, float, complex))}")

# 类型转换示例
x_str = str(x)
x_float = float(x)
print(f"转为字符串: {x_str}, 类型: {type(x_str)}")
print(f"转为浮点数: {x_float}, 类型: {type(x_float)}")

# 这些数据类型各有特点，在不同的场景下有不同的用途
# 列表适合存储有序的、需要修改的数据
# 元组适合存储不可修改的数据
# 集合适合去重和数学运算
# 字典适合存储键值对数据
# 字符串适合处理文本数据
